/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.dominio.servicio.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import javax.inject.Inject;
import java.util.logging.Logger;
import org.springframework.stereotype.Service;
import pe.com.cotelasa.common.dao.excepcion.DAOException;
import pe.com.cotelasa.scp.dao.IDAOControlDrawback;
import pe.com.cotelasa.scp.dominio.common.ESTADO_REGISTRO;
import pe.com.cotelasa.scp.dominio.common.ESTADO_RESULTADO;
import pe.com.cotelasa.scp.dominio.common.ResultadoServicio;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioControlDrawback;
import pe.com.cotelasa.scp.entidad.ControlDrawback;

/**
 *
 * @author WINDOWS 7
 */
@Service
public class ServicioControlDrawbackImpl implements IServicioControlDrawback, Serializable {
    
    @Inject
    private IDAOControlDrawback daoControlDrawback;
    
    @Override
    public Collection<ControlDrawback> listarControlDrawbackActivos() throws ServiceException {
        try {
            return daoControlDrawback.listarActivos(ControlDrawback.class);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ControlDrawback conseguirControlDrawbackPorId(Integer idControlDrawback) throws ServiceException {
        try {
            return daoControlDrawback.obtenerEntidadPorId(ControlDrawback.class, idControlDrawback);
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

    @Override
    public ResultadoServicio guardarControlDrawback(ControlDrawback controlDrawback) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try { 
            controlDrawback.setEstadoRegistro(ESTADO_REGISTRO.ACTIVO.getValor());
            resultadoServicio.setID(daoControlDrawback.insert(controlDrawback));
            resultadoServicio.setMensaje("Se guardó el control satisfactoriamente.");
        } catch (Exception ex) {
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio
                    .setMensaje("Ocurrio un problema al tratar de guardar el documento. Vuelva a intentar");
            Logger.getLogger(ServicioControlDrawbackImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public ResultadoServicio actualizarControlDrawback(ControlDrawback controlDrawback) throws ServiceException {
        ResultadoServicio resultadoServicio = new ResultadoServicio(ESTADO_RESULTADO.EXITOSO);
        try {

            daoControlDrawback.actualizar(controlDrawback);
            resultadoServicio.setMensaje("Se actualizó el documento satisfactoriamente.");
        } catch (Exception ex) {
            resultadoServicio.setEstadoResultado(ESTADO_RESULTADO.FALLIDO);
            resultadoServicio
                    .setMensaje("Ocurrio un problema al tratar de guardar el documento. Vuelva a intentar");
            Logger.getLogger(ServicioControlDrawbackImpl.class.getName()).log(Level.SEVERE, null, ex);
        }
        return resultadoServicio;
    }

    @Override
    public ControlDrawback buscarPorCodVenta(Integer codVenta) throws ServiceException {
        try {
            Map<String, Object> parametro = new HashMap<String, Object>();
            parametro.put("ventaFacturacion.coddocventa", codVenta);
            parametro.put("estadoRegistro", "" + ESTADO_REGISTRO.ACTIVO.getValor());
            List<ControlDrawback> lista = (List<ControlDrawback>)daoControlDrawback.obtenerColeccionEntidadPorFiltros(ControlDrawback.class, parametro);
            if(!lista.isEmpty()){
                return lista.get(0);
            }else{
                return null;
            }
            
        } catch (DAOException ex) {
            throw new ServiceException(ex.getMessage(), ex);
        }
    }

}
